package com.work.device.mapper;

import com.work.device.pojo.DeviceInfo;
import org.apache.ibatis.annotations.*;
import tk.mybatis.mapper.common.Mapper;

import java.util.List;
import java.util.Map;

public interface DeviceInfoMapper extends Mapper<DeviceInfo> {
    /**
     * 根据设备id删除设备详细信息
     *
     * @param id 设备ID
     * @return 删除的行数
     */
    @Delete("delete from t_device_info where did=#{id}")
    Integer deleteInfoByDeviceId(@Param("id") Long id);

    /**
     * 根据设备id删除在设备与数据指标的表的相关设备信息
     *
     * @param id 设备ID
     * @return 删除的行数
     */
    @Delete("delete from t_device_index where did=#{id} ")
    Integer deleteIndexByDeviceId(@Param("id") Long id);

    /**
     * 新增设备详细信息
     *
     * @param deviceInfo 设备信息
     * @return 添加的行数
     */
    @Insert("insert into t_device_info(id,did,info,param) values(#{id},#{did},#{info},#{param})")
    Integer addInfo(DeviceInfo deviceInfo);

    /**
     * 新增设备与设备数据的信息
     *
     * @param deviceInfo 设备信息
     * @return 添加的行数
     */
    @Insert("<script>insert into t_device_index(<if test='id!=null'>id,</if><if test='did!=null'>did,</if><if test='range!=null'>`range`,</if><if test='accuracy!=null'>accuracy,</if><if test='resolvingPower!=null'>resolving_power,</if><if test='iid!=null'>iid</if>) values(<if test='diid!=null'>#{diid},</if><if test='did!=null'>#{did},</if><if test='range!=null'>#{range},</if><if test='accuracy!=null'>#{accuracy},</if><if test='resolvingPower!=null'>#{resolvingPower},</if><if test='iid!=null'>#{iid}</if>)</script>")
    Integer addDeviceAndIndex(DeviceInfo deviceInfo);

    /**
     * 查询设备详细信息
     *
     * @param id 设备id
     * @return 查询的结果
     */
    @Select("select * from t_device_info where did=#{id}")
    Map findInfoByDeviceId(@Param("id") Long id);

    /**
     * 查询设备的数据指标
     *
     * @param id 设备id
     * @return 查询的结果
     */
    @Select("select * from t_device_index where id=#{id}")
    Map findDeviceAndIndexById(@Param("id") Long id);

    /**
     * 更新设备详细信息
     *
     * @param deviceInfo 设备信息
     * @return 更新的行数
     */
    @Update("update t_device_info set param=#{param},info=#{info} where did=#{did}")
    Integer updateInfo(DeviceInfo deviceInfo);

    /**
     * 更新设备的数据指标
     *
     * @param deviceInfo 设备信息
     * @return 更新的行数
     */
    @Update("<script>update t_device_index <set><if test='range!=null'> `range`=#{range},</if><if test='accuracy!=null'>accuracy=#{accuracy},</if><if test='resolvingPower!=null'>resolving_power=#{resolvingPower},</if><if test='iid!=null'>iid=#{iid},</if> </set> where id=#{diid}</script>")
    Integer updateDeviceAndIndex(DeviceInfo deviceInfo);

    /***
     * 根据iid查询设备id集合
     * @param iid 数据指标id
     * @return 设备did集合
     */
    @Select("select did from t_device_index where iid=#{iid}")
    List<Long> findDeviceIdByIid(@Param("iid") Long iid);

    /**
     * 查询设备与指标的关联id
     *
     * @param id 设备id
     * @return 查询的结果
     */
    @Select("select id from t_device_index where did=#{id}")
    List<Long> findDeviceAndIndexIdByDeviceId(Long id);


    /**
     * 查询设备与指标的关联id
     *
     * @param did
     * @param iid
     * @return
     */
    @Select("select count(*) from t_device_index where did=#{did} and iid=#{iid}")
    Integer exist(@Param("did") Long did,@Param("iid") Long iid);
}
